﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace YunLian.Cache
{
    public interface ICache<TCacheValue>:IDisposable
    {
        TCacheValue this[string key] { get; set; }
        TCacheValue this[string key, string region] { get; set; }
        bool Add(string key, TCacheValue value);
        bool Add(string key, TCacheValue value,string region);
        bool Add(CacheItem<TCacheValue> item);
        void Clear();
        void ClearRegion(string region);
        bool Exists(string key);
        bool Exists(string key, string region);
        TCacheValue Get(string key);
        TCacheValue Get(string key, string region);
        TOut Get<TOut>(string key);
        TOut Get<TOut>(string key, string region);
        CacheItem<TCacheValue> GetCacheItem(string key);
        CacheItem<TCacheValue> GetCacheItem(string key, string region);

        void Put(string key, TCacheValue value);
        void Put(string key, TCacheValue value, string region);
        void Put(CacheItem<TCacheValue> item);
        void Put(CacheItem<TCacheValue>item, string region);
        bool Remove(string key);
        bool Remove(string key, string region);


    }
}
